﻿namespace Course2
{
    public class ArrayList
    {
        private object[] _data = new object[20];
        private int _index = 0;
        public object Get(int i)
        {
            if (_data.Length <= _index)
            {
                _index = _data.Length - 1;
            }
            return _data[i];
        }
        public void Add(object item)
        {
            if (_data.Length <= _index)
            {
                _index = _data.Length - 1;
            }
            _data[_index] = item;
            _index++;
        }
    }
    public class ArrayList<T>
    {
        private T[] _data = new T[20];
        private int _index = 0;
        public T Get(int i)
        {
            if (_data.Length <= _index)
            {
                _index = _data.Length - 1;
            }
            return _data[i];
        }
        public void Add(T item)
        {
            if (_data.Length <= _index)
            {
                _index = _data.Length - 1;
            }
            _data[_index] = item;
            _index++;
        }
    }
    /// <summary>
    /// 泛型和索引器
    /// </summary>
    internal class Example1
    {
        public void Test1()
        {
            var list1 = new ArrayList();
            list1.Add(20);
            list1.Add(30);
            var i0 = list1.Get(0);
            var i1 = list1.Get(1);
        }
        public void Test2()
        {
            var list1 = new ArrayList<int>();
            list1.Add(20);
            list1.Add(30);
            int i0 = list1.Get(0);
            int i1 = list1.Get(1);
            var list2 = new ArrayList<string>();
            list2.Add("aa");
            list2.Add("ff");
            string s1 = list2.Get(0);
            string s2 = list2.Get(1);
        }
    }
}
